﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography.X509Certificates;
using Sistema.Dominio;

namespace Sistema.NFe
{
    public class EnviarNFe : NFe
    {
        public void Enviar(NFeInfo dados, X509Certificate2 CertificadoDigital)
        {
            NFeInfo retornoPesquisa = base._repository.PesquisaPorNumeroeSerie(dados.Serie, dados.Numero);

            if (retornoPesquisa != null)
            {
                if (retornoPesquisa.StatusNota != enumStatusNota.Rejeitada)
                {
                    return;
                }
                else
                {
                    retornoPesquisa.Dados = dados.Dados;
                    dados = retornoPesquisa;
                }
            }

            WebServiceNFe.EnviarNFe enviar = new WebServiceNFe.EnviarNFe();
            dados.DadosEnvio.Add(enviar.Enviar(dados.Dados.Xml, CertificadoDigital));
            dados.StatusNota = enumStatusNota.Enviada;
            base.Salvar(dados);
        }

        public void Enviar(IList<NFeInfo> dados, X509Certificate2 CertificadoDigital)
        {
            foreach (var item in dados)
            {
                this.Enviar(item, CertificadoDigital);
                this.OnNFeEnvia(this, new NFeEnvioArgs() { Numero = item.Numero, Serie = item.Serie });
            }
        }

        public event NFeEventhandle OnNFeEnvia;
    }

    public delegate void NFeEventhandle(object sender, NFeEnvioArgs result);

    public class NFeEnvioArgs : EventArgs
    {
        public String Numero { get; set; }
        public String Serie { get; set; }
    }
}
